#ifndef _geojsonvt_io_H_
#define _geojsonvt_io_H_


#include <map>
#include <mapbox/geojsonvt/tile.hpp>
#include <mapbox/geojsonvt/types.hpp>
#include <mapbox/geometry.hpp>
#include <sstream>

namespace mapbox {
namespace geojsonvt {

using value = mapbox::feature::value;
using null_value_t = mapbox::feature::null_value_t;
using identifier = mapbox::feature::identifier;
using empty_vt = mapbox::geometry::empty;
using point_vt = mapbox::geometry::point<int16_t>;
using multi_point_vt = mapbox::geometry::multi_point<int16_t>;
using line_string_vt = mapbox::geometry::line_string<int16_t>;
using linear_ring_vt = mapbox::geometry::linear_ring<int16_t>;
using multi_line_string_vt = mapbox::geometry::multi_line_string<int16_t>;
using polygon_vt = mapbox::geometry::polygon<int16_t>;
using multi_polygon_vt = mapbox::geometry::multi_polygon<int16_t>;
using geometry_vt = mapbox::geometry::geometry<int16_t>;
using geometry_collection_vt = mapbox::geometry::geometry_collection<int16_t>;
using feature_vt = mapbox::feature::feature<int16_t>;
using feature_collection_vt = mapbox::feature::feature_collection<int16_t>;
using geojson_vt = mapbox::util::variant<geometry_vt, feature_vt, feature_collection_vt>;

// Stringify inputs of known types. Instantiations are provided for geometry, feature, and
// feature_collection.
template <class T>
std::string stringify(const T&);

// Stringify any GeoJSON type.
std::string stringify(const geojson_vt&);

} // namespace geojsonvt
} // namespace mapbox
#endif